class: center, middle, inverse, title-slide #
cmcR
: An open-source implementation of the Congruent Matching Cells method ## Creative Component Oral Exam ### Joseph Zemmels ### Iowa State University ### 4/13/20 --- <style> pre { display: block; font-family: monospace; white-space: pre; margin: 1em 0px; margin-top: 0em; margin-right: 0px; margin-bottom: 0em; margin-left: 0px; } </style> #Overview - Motivation and Background Information - Pre-processing procedures - Cell-based comparison procedure - Congruent Matching Cells logic - Results & Discussion - Conclusion and Future Work --- class: inverse, center, middle # Motivation & Background Information --- # Anatomy of a cartridge case .pull-left[ 1) Bullet 2) Cartridge case 3) Propellant 4) Rim 5) Primer ] .pull-right[ <img src="images/cartridgeCaseDiagram.png" width="330" style="display: block; margin: auto 0 auto auto;" /> ] .footnote[ [1] [Image Source](https://commons.wikimedia.org/wiki/File:Bulletfixed.PNG) ] <!-- --- --> <!-- background-image: url(https://github.com/yihui/xaringan/releases/download/v0.0.2/karl-moustache.jpg) --> <!-- background-position: 50% 50% --> <!-- class: center, bottom, inverse --> <!-- # You only live once! --> --- # Breech face impressions - Cartridge case slams into back wall (i.e., *breech face*) of barrel - Contact often "stamps" breech face markings onto cartridge case primer/base .pull-left[ <img src="images/firearmBreechFace.png" width="400" height="300" style="display: block; margin: auto 0 auto auto;" /> ] .pull-right[ <img src="images/cartridgeCasePrimer.png" width="400" height="300" style="display: block; margin: auto 0 auto auto;" /> ] .footnote[ [1] [Images Source](http://www.firearmsid.com/A_CCIDImpres.htm) ] --- #Breech face vs. firing pin impressions <img src="images/primerBFImpressionDiagram.png" width="351" style="display: block; margin: auto;" /> .footnote[ [1] [Image Source](https://pdfs.semanticscholar.org/f2ab/001b090f2fcb79eff7a83b8aafeb81909944.pdf?_ga=2.260252488.476104195.1585242193-1176892230.1581362963) ] --- # Cartridge Case Surface Matrices ```r x3p1 <- x3ptools::read_x3p("path/to/file.x3p") %>% x3ptools::sample_x3p(m = 8) #for visualization purposes x3ptools::image_x3p(x3p1) ```
--- # Congruent Matching Cells method - Some regions of cartridge case contain strong *ballistic signature* - Comparing entire scans may not highlight "valid correlation areas" - Number of matching cells is a more granular similarity metric <img src="images/im1_im2_cellComparison.png" width="567" style="display: block; margin: auto;" /> .footnote[ [1] [Song (2013)](https://tsapps.nist.gov/publication/get_pdf.cfm?pub_id=910868) ] --- #Congruent Matching Cells method - Two cartridge case scans can be rotationally and translationally aligned. - `\(\pmb{\beta} \equiv (dx,dy,\theta)' \in \mathbb{R} \times \mathbb{R} \times [0,2\pi)\)` aligns Matrix 1 to Matrix 2 - Cartridge case's cells can also be aligned - `\(\pmb{\beta}_i \equiv (dx_i,dy_i,\theta_i)', i = 1,...,n\)` for `\(n\)` total cells -- - We expect `\(\pmb{\beta}_i = \pmb{\beta}, \forall i = 1,...,n\)` for true matches - We can realistically only determine if `\(\hat{\pmb{\beta}}_i \approx \hat{\pmb{\beta}}_j, i \neq j\)` -- - Use estimated alignment parameters as features to classify matches --- #Congruent Matching Cells method <!-- --> --- class: inverse, middle, center # Pre-processing procedures --- # Pre-processing goals 1) Remove regions of scan that do not contain breech face impressions - Preferably do so automatically 2) Highlight remaining breech face impressions via Gaussian filtering <img src="images/bfImpressionHighlighted.png" width="340" style="display: block; margin: auto;" /> --- # 1. Identify BF impression height value - RANSAC (Random Sample Consensus) robust, iterative plane-fitting <img src="images/ransacMethod.png" width="455" style="display: block; margin: auto;" /> .footnote[ [1] [Image Source](https://bitesofcode.wordpress.com/tag/opencv/) ] --- #1. Identify BF impression height value - Use RANSAC method to identify BF impression height value in scan 1) Take residuals between fitted plane and observed values within the final selection threshold specified 2) Take observed values within final selection threshold ```r x3p1$surface.matrix <- x3p1$surface.matrix %>% cmcR::preProcess_ransac(inlierTreshold = 10^-5, finalSelectionThreshold = 2*(10^-5), iters = 150) %>% cmcR::preProcess_levelBF(useResiduals = TRUE) x3ptools::image_x3p(x3p1) ``` --- #1. Identify BF impression height value - Relies on randomly sampling surface matrix, so results may differ between uses
--- #2. Removing "minutiae" ```r x3p1$surface.matrix <- x3p1$surface.matrix %>% cmcR::preProcess_cropWS(croppingThresh = 2) ``` --- #2. Removing "minutiae" - Hough Transform ```r x3p1$surface.matrix <- x3p1$surface.matrix %>% cmcR::preProcess_removeFPCircle() ``` --- #3. Gaussian filtering ```r x3p1$surface.matrix <- x3p1$surface.matrix %>% cmcR::preProcess_gaussFilter(res = 25, #downsampled resolution wavelength = c(16,250), filtertype = "bp") ``` --- #Pre-processing procedures conclusion - Pre-processing procedures affect final results - Methods used by some authors are still unavailable - Second-order robust Gaussian regression filter - Exact implementations may never be available --- class: inverse, middle, center # Cell-based comparison procedure --- #Cross-correlation function --- #Cross-correlation theorem --- # Cell-based comparison procedure 1) Partition surface matrix 1 into grid of cells -- 2) Pair each cell with larger "region" in surface matrix 2 such that their center indices coincide. -- 3) For each rotation value: - Rotate surface matrix 2 using linear interpolation scheme -- - Remove from consideration cell/region pairs with too few observed values -- - Shift and/or scale cells/regions (e.g., by respective average and/or standard deviation) -- - Replace `NA` values with 0 -- - Calculate maximum cross-correlation function and associated `\((dx,dy)'\)` values using a FFT-based method --- #Cell-based comparison procedure 3) For each rotation value: - Using `\((dx,dy)'\)` values, calculate pairwise-complete correlation between cell and a cell-sized matrix extracted from surface matrix 2 <img src="./images/ccfCellPairExample.png" width="486" style="display: block; margin: auto;" /> --- # Cell-based comparison procedure ```r comparison1 <- cmcR::cellCCF(x3p1,x3p2, thetas = seq(-30,30,by = 3), cellNumHoriz = 8, regionToCellProp = 4, minObservedProp = .15, centerCell = "individualCell", scaleCell = "individualCell") comparison1$ccfResults$`-30` ``` --- class: inverse, middle, center # Congruent Matching Cells logic --- # Initially proposed method - For each cell/region pair, determine alignment parameter estimates at which max CCF occurs - `\(\hat{\pmb{\beta}}_{\max,i}\)` for `\(i = 1,....,n\)` cells ```r topResults <- cmcR::topResultsPerCell(comparison1$ccfResults) topResults #see next slide ``` --- #Initially proposed method <div style="border: 1px solid #ddd; padding: 0px; overflow-y: scroll; height:400px; "><table class="table" style="margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> cellNum </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> cellID </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> ccf </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> fft.ccf </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> dx </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> dy </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> theta </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> y = 1 - 146, x = 291 - 434 </td> <td style="text-align:right;"> 0.5770650 </td> <td style="text-align:right;"> 0.2478071 </td> <td style="text-align:right;"> -26 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> y = 1 - 146, x = 435 - 579 </td> <td style="text-align:right;"> 0.6162795 </td> <td style="text-align:right;"> 0.2031059 </td> <td style="text-align:right;"> 37 </td> <td style="text-align:right;"> -73 </td> <td style="text-align:right;"> -12 </td> </tr> <tr> <td style="text-align:right;"> 5 </td> <td style="text-align:left;"> y = 1 - 146, x = 580 - 724 </td> <td style="text-align:right;"> 0.4235836 </td> <td style="text-align:right;"> 0.1384763 </td> <td style="text-align:right;"> -42 </td> <td style="text-align:right;"> -2 </td> <td style="text-align:right;"> 30 </td> </tr> <tr> <td style="text-align:right;"> 6 </td> <td style="text-align:left;"> y = 1 - 146, x = 725 - 868 </td> <td style="text-align:right;"> 0.6295781 </td> <td style="text-align:right;"> 0.3065589 </td> <td style="text-align:right;"> 15 </td> <td style="text-align:right;"> 14 </td> <td style="text-align:right;"> 24 </td> </tr> <tr> <td style="text-align:right;"> 59 </td> <td style="text-align:left;"> y = 1020 - 1164, x = 291 - 434 </td> <td style="text-align:right;"> 0.7317458 </td> <td style="text-align:right;"> 0.4390163 </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> -5 </td> <td style="text-align:right;"> 21 </td> </tr> <tr> <td style="text-align:right;"> 60 </td> <td style="text-align:left;"> y = 1020 - 1164, x = 435 - 579 </td> <td style="text-align:right;"> 0.5910859 </td> <td style="text-align:right;"> 0.2854961 </td> <td style="text-align:right;"> -28 </td> <td style="text-align:right;"> -4 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 61 </td> <td style="text-align:left;"> y = 1020 - 1164, x = 580 - 724 </td> <td style="text-align:right;"> 0.6274347 </td> <td style="text-align:right;"> 0.3573398 </td> <td style="text-align:right;"> -40 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 9 </td> </tr> <tr> <td style="text-align:right;"> 62 </td> <td style="text-align:left;"> y = 1020 - 1164, x = 725 - 868 </td> <td style="text-align:right;"> 0.6753774 </td> <td style="text-align:right;"> 0.4380810 </td> <td style="text-align:right;"> -3 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 10 </td> <td style="text-align:left;"> y = 147 - 291, x = 146 - 290 </td> <td style="text-align:right;"> 0.7794849 </td> <td style="text-align:right;"> 0.3278696 </td> <td style="text-align:right;"> -20 </td> <td style="text-align:right;"> 15 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 14 </td> <td style="text-align:left;"> y = 147 - 291, x = 725 - 868 </td> <td style="text-align:right;"> 0.6455861 </td> <td style="text-align:right;"> 0.2591778 </td> <td style="text-align:right;"> -22 </td> <td style="text-align:right;"> 14 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 15 </td> <td style="text-align:left;"> y = 147 - 291, x = 869 - 1013 </td> <td style="text-align:right;"> 0.6015231 </td> <td style="text-align:right;"> 0.1552785 </td> <td style="text-align:right;"> 72 </td> <td style="text-align:right;"> -11 </td> <td style="text-align:right;"> -30 </td> </tr> <tr> <td style="text-align:right;"> 17 </td> <td style="text-align:left;"> y = 292 - 437, x = 1 - 145 </td> <td style="text-align:right;"> 0.7076137 </td> <td style="text-align:right;"> 0.2293726 </td> <td style="text-align:right;"> -8 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> -21 </td> </tr> <tr> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> y = 292 - 437, x = 1014 - 1157 </td> <td style="text-align:right;"> 0.7658447 </td> <td style="text-align:right;"> 0.3541091 </td> <td style="text-align:right;"> -17 </td> <td style="text-align:right;"> -19 </td> <td style="text-align:right;"> -9 </td> </tr> <tr> <td style="text-align:right;"> 23 </td> <td style="text-align:left;"> y = 292 - 437, x = 869 - 1013 </td> <td style="text-align:right;"> 0.7982656 </td> <td style="text-align:right;"> 0.4211768 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 25 </td> <td style="text-align:left;"> y = 438 - 582, x = 1 - 145 </td> <td style="text-align:right;"> 0.5439700 </td> <td style="text-align:right;"> 0.1922582 </td> <td style="text-align:right;"> -8 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> -21 </td> </tr> <tr> <td style="text-align:right;"> 32 </td> <td style="text-align:left;"> y = 438 - 582, x = 1014 - 1157 </td> <td style="text-align:right;"> 0.6175944 </td> <td style="text-align:right;"> 0.2488871 </td> <td style="text-align:right;"> -10 </td> <td style="text-align:right;"> 25 </td> <td style="text-align:right;"> -27 </td> </tr> <tr> <td style="text-align:right;"> 31 </td> <td style="text-align:left;"> y = 438 - 582, x = 869 - 1013 </td> <td style="text-align:right;"> 0.7859211 </td> <td style="text-align:right;"> 0.3196243 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> -32 </td> <td style="text-align:right;"> -21 </td> </tr> <tr> <td style="text-align:right;"> 33 </td> <td style="text-align:left;"> y = 583 - 728, x = 1 - 145 </td> <td style="text-align:right;"> 0.5536341 </td> <td style="text-align:right;"> 0.2433973 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 20 </td> <td style="text-align:right;"> -15 </td> </tr> <tr> <td style="text-align:right;"> 40 </td> <td style="text-align:left;"> y = 583 - 728, x = 1014 - 1157 </td> <td style="text-align:right;"> 0.7087554 </td> <td style="text-align:right;"> 0.2099138 </td> <td style="text-align:right;"> -13 </td> <td style="text-align:right;"> 23 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 34 </td> <td style="text-align:left;"> y = 583 - 728, x = 146 - 290 </td> <td style="text-align:right;"> 0.7435340 </td> <td style="text-align:right;"> 0.1677704 </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 70 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:right;"> 39 </td> <td style="text-align:left;"> y = 583 - 728, x = 869 - 1013 </td> <td style="text-align:right;"> 0.8335277 </td> <td style="text-align:right;"> 0.4256908 </td> <td style="text-align:right;"> -22 </td> <td style="text-align:right;"> 52 </td> <td style="text-align:right;"> -18 </td> </tr> <tr> <td style="text-align:right;"> 41 </td> <td style="text-align:left;"> y = 729 - 873, x = 1 - 145 </td> <td style="text-align:right;"> 0.6476395 </td> <td style="text-align:right;"> 0.2925657 </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> -15 </td> </tr> <tr> <td style="text-align:right;"> 48 </td> <td style="text-align:left;"> y = 729 - 873, x = 1014 - 1157 </td> <td style="text-align:right;"> 0.6522595 </td> <td style="text-align:right;"> 0.2768101 </td> <td style="text-align:right;"> -15 </td> <td style="text-align:right;"> 19 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 42 </td> <td style="text-align:left;"> y = 729 - 873, x = 146 - 290 </td> <td style="text-align:right;"> 0.6621352 </td> <td style="text-align:right;"> 0.2711421 </td> <td style="text-align:right;"> -11 </td> <td style="text-align:right;"> 25 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 43 </td> <td style="text-align:left;"> y = 729 - 873, x = 291 - 434 </td> <td style="text-align:right;"> 0.6853644 </td> <td style="text-align:right;"> 0.2438692 </td> <td style="text-align:right;"> -11 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> -12 </td> </tr> <tr> <td style="text-align:right;"> 46 </td> <td style="text-align:left;"> y = 729 - 873, x = 725 - 868 </td> <td style="text-align:right;"> 0.6326880 </td> <td style="text-align:right;"> 0.0951595 </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> 72 </td> <td style="text-align:right;"> 21 </td> </tr> <tr> <td style="text-align:right;"> 47 </td> <td style="text-align:left;"> y = 729 - 873, x = 869 - 1013 </td> <td style="text-align:right;"> 0.5147470 </td> <td style="text-align:right;"> 0.1535108 </td> <td style="text-align:right;"> 39 </td> <td style="text-align:right;"> 22 </td> <td style="text-align:right;"> 6 </td> </tr> <tr> <td style="text-align:right;"> 50 </td> <td style="text-align:left;"> y = 874 - 1019, x = 146 - 290 </td> <td style="text-align:right;"> 0.5093605 </td> <td style="text-align:right;"> 0.2297343 </td> <td style="text-align:right;"> 32 </td> <td style="text-align:right;"> 32 </td> <td style="text-align:right;"> -12 </td> </tr> <tr> <td style="text-align:right;"> 51 </td> <td style="text-align:left;"> y = 874 - 1019, x = 291 - 434 </td> <td style="text-align:right;"> 0.5787146 </td> <td style="text-align:right;"> 0.1957406 </td> <td style="text-align:right;"> -7 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 52 </td> <td style="text-align:left;"> y = 874 - 1019, x = 435 - 579 </td> <td style="text-align:right;"> 0.5287469 </td> <td style="text-align:right;"> 0.1645524 </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 28 </td> <td style="text-align:right;"> -27 </td> </tr> <tr> <td style="text-align:right;"> 53 </td> <td style="text-align:left;"> y = 874 - 1019, x = 580 - 724 </td> <td style="text-align:right;"> 0.5970009 </td> <td style="text-align:right;"> 0.2183671 </td> <td style="text-align:right;"> -9 </td> <td style="text-align:right;"> 22 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 54 </td> <td style="text-align:left;"> y = 874 - 1019, x = 725 - 868 </td> <td style="text-align:right;"> 0.4360425 </td> <td style="text-align:right;"> 0.1278409 </td> <td style="text-align:right;"> -4 </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 55 </td> <td style="text-align:left;"> y = 874 - 1019, x = 869 - 1013 </td> <td style="text-align:right;"> 0.6677909 </td> <td style="text-align:right;"> 0.3780674 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> -13 </td> <td style="text-align:right;"> -6 </td> </tr> </tbody> </table></div> --- # Initially proposed method - Determine "consensus" among these values, `\(\bar{\pmb{\beta}}\)`, by, e.g., taking their median -- - Classify cell pair as "congruent matching" if associated alignment parameter estimates are close to consensual values - `\(\left\lvert\hat{\pmb{\beta}}_{\max,i} - \bar{\pmb{\beta}}\right\rvert \leq \pmb{T}\)` for thresholds `\(\pmb{T}\)`. -- - Issue: initially proposed method only allows cell pairs to "vote" for a single alignment parameter combination --- #Initially proposed method ```r topResults %>% cmcR::cmcFilter(consensus_function = median, corr_thresh = .7, dx_thresh = 20, theta_thresh = 3) ``` <div style="border: 1px solid #ddd; padding: 0px; overflow-y: scroll; height:300px; "><table class="table" style="margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> cellNum </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> cellID </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> ccf </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> fft.ccf </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> dx </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> dy </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> theta </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> y = 1 - 146, x = 291 - 434 </td> <td style="text-align:right;"> 0.5770650 </td> <td style="text-align:right;"> 0.2478071 </td> <td style="text-align:right;"> -26 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 60 </td> <td style="text-align:left;"> y = 1020 - 1164, x = 435 - 579 </td> <td style="text-align:right;"> 0.5910859 </td> <td style="text-align:right;"> 0.2854961 </td> <td style="text-align:right;"> -28 </td> <td style="text-align:right;"> -4 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 62 </td> <td style="text-align:left;"> y = 1020 - 1164, x = 725 - 868 </td> <td style="text-align:right;"> 0.6753774 </td> <td style="text-align:right;"> 0.4380810 </td> <td style="text-align:right;"> -3 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 10 </td> <td style="text-align:left;"> y = 147 - 291, x = 146 - 290 </td> <td style="text-align:right;"> 0.7794849 </td> <td style="text-align:right;"> 0.3278696 </td> <td style="text-align:right;"> -20 </td> <td style="text-align:right;"> 15 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 14 </td> <td style="text-align:left;"> y = 147 - 291, x = 725 - 868 </td> <td style="text-align:right;"> 0.6455861 </td> <td style="text-align:right;"> 0.2591778 </td> <td style="text-align:right;"> -22 </td> <td style="text-align:right;"> 14 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 17 </td> <td style="text-align:left;"> y = 292 - 437, x = 1 - 145 </td> <td style="text-align:right;"> 0.7076137 </td> <td style="text-align:right;"> 0.2293726 </td> <td style="text-align:right;"> -8 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> -21 </td> </tr> <tr> <td style="text-align:right;"> 23 </td> <td style="text-align:left;"> y = 292 - 437, x = 869 - 1013 </td> <td style="text-align:right;"> 0.7982656 </td> <td style="text-align:right;"> 0.4211768 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 25 </td> <td style="text-align:left;"> y = 438 - 582, x = 1 - 145 </td> <td style="text-align:right;"> 0.5439700 </td> <td style="text-align:right;"> 0.1922582 </td> <td style="text-align:right;"> -8 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> -21 </td> </tr> <tr> <td style="text-align:right;"> 40 </td> <td style="text-align:left;"> y = 583 - 728, x = 1014 - 1157 </td> <td style="text-align:right;"> 0.7087554 </td> <td style="text-align:right;"> 0.2099138 </td> <td style="text-align:right;"> -13 </td> <td style="text-align:right;"> 23 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 48 </td> <td style="text-align:left;"> y = 729 - 873, x = 1014 - 1157 </td> <td style="text-align:right;"> 0.6522595 </td> <td style="text-align:right;"> 0.2768101 </td> <td style="text-align:right;"> -15 </td> <td style="text-align:right;"> 19 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 42 </td> <td style="text-align:left;"> y = 729 - 873, x = 146 - 290 </td> <td style="text-align:right;"> 0.6621352 </td> <td style="text-align:right;"> 0.2711421 </td> <td style="text-align:right;"> -11 </td> <td style="text-align:right;"> 25 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 51 </td> <td style="text-align:left;"> y = 874 - 1019, x = 291 - 434 </td> <td style="text-align:right;"> 0.5787146 </td> <td style="text-align:right;"> 0.1957406 </td> <td style="text-align:right;"> -7 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 53 </td> <td style="text-align:left;"> y = 874 - 1019, x = 580 - 724 </td> <td style="text-align:right;"> 0.5970009 </td> <td style="text-align:right;"> 0.2183671 </td> <td style="text-align:right;"> -9 </td> <td style="text-align:right;"> 22 </td> <td style="text-align:right;"> -24 </td> </tr> <tr> <td style="text-align:right;"> 54 </td> <td style="text-align:left;"> y = 874 - 1019, x = 725 - 868 </td> <td style="text-align:right;"> 0.4360425 </td> <td style="text-align:right;"> 0.1278409 </td> <td style="text-align:right;"> -4 </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> -24 </td> </tr> </tbody> </table></div> --- # "Improved" method - Cell pair may be highly similar at true `\(\pmb{\beta}\)`, but happened to not vote for it -- - Use extracted features more advantageously & perform comparisons in both "directions" -- - Count CMCs for each rotation value and identify CMC modes - Determine "high" CMC threshold, `\(\text{CMC}_{\text{high}} = \text{CMC}_{\max} - \tau\)` for some `\(\tau\)` - Find `\(\theta\)` value furthest from `\(\text{CMC}_{\max}\)` value with associated count greater than or equal to `\(\text{CMC}_{\text{high}}\)` -- - If modes are too far from each other, then cell pair likely not a match --- class: center **Known match** <img src="images/kmCMCpertheta.png" width="446" style="display: block; margin: auto;" /> **Known non-match** <img src="images/knmCMCpertheta.png" width="446" style="display: block; margin: auto;" /> --- # "Improved" method - If CMC modes are too far from each other, then assign CMC count based on initially proposed method - Otherwise, count CMCs within `theta_thresh` of the CMC mode for both comparison directions, excluding replicates ```r comparison2 <- cmcR::cellCCF_bothDirections(x3p1,x3p2, thetas = seq(-30,30,by = 3), cellNumHoriz = 8, regionToCellProp = 4, minObservedProp = .15, centerCell = "individualCell", scaleCell = "individualCell") cmc <- comparison2 %>% cmcR::cmcFilter_improved(consensus_function = median, corr_thresh = .7, dx_thresh = 20, theta_thresh = 3) ``` --- # "Improved" method ```r cmc$finalCMCs ``` <div style="border: 1px solid #ddd; padding: 0px; overflow-y: scroll; height:400px; "><table class="table" style="margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> cellNum </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> cellID </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> ccf </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> fft.ccf </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> dx </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> dy </th> <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> theta </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> comparison </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> y = 1 - 146, x = 291 - 434 </td> <td style="text-align:right;"> 0.5770650 </td> <td style="text-align:right;"> 0.2478071 </td> <td style="text-align:right;"> -26 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 10 </td> <td style="text-align:left;"> y = 147 - 291, x = 146 - 290 </td> <td style="text-align:right;"> 0.7794849 </td> <td style="text-align:right;"> 0.3278696 </td> <td style="text-align:right;"> -20 </td> <td style="text-align:right;"> 15 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 14 </td> <td style="text-align:left;"> y = 147 - 292, x = 734 - 879 </td> <td style="text-align:right;"> 0.8094664 </td> <td style="text-align:right;"> 0.3288378 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> -23 </td> <td style="text-align:right;"> 21 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 15 </td> <td style="text-align:left;"> y = 147 - 292, x = 880 - 1026 </td> <td style="text-align:right;"> 0.7126513 </td> <td style="text-align:right;"> 0.3349312 </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> -8 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 17 </td> <td style="text-align:left;"> y = 292 - 437, x = 1 - 145 </td> <td style="text-align:right;"> 0.7076137 </td> <td style="text-align:right;"> 0.2293726 </td> <td style="text-align:right;"> -8 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> -21 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 23 </td> <td style="text-align:left;"> y = 292 - 437, x = 869 - 1013 </td> <td style="text-align:right;"> 0.7982656 </td> <td style="text-align:right;"> 0.4211768 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> y = 293 - 438, x = 1027 - 1172 </td> <td style="text-align:right;"> 0.7305234 </td> <td style="text-align:right;"> 0.3495699 </td> <td style="text-align:right;"> 14 </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 27 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 25 </td> <td style="text-align:left;"> y = 439 - 584, x = 1 - 147 </td> <td style="text-align:right;"> 0.6775772 </td> <td style="text-align:right;"> 0.3760379 </td> <td style="text-align:right;"> 7 </td> <td style="text-align:right;"> -12 </td> <td style="text-align:right;"> 21 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 31 </td> <td style="text-align:left;"> y = 439 - 584, x = 880 - 1026 </td> <td style="text-align:right;"> 0.7391509 </td> <td style="text-align:right;"> 0.4155445 </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> -31 </td> <td style="text-align:right;"> 21 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 32 </td> <td style="text-align:left;"> y = 439 - 584, x = 1027 - 1172 </td> <td style="text-align:right;"> 0.6637058 </td> <td style="text-align:right;"> 0.2453879 </td> <td style="text-align:right;"> 7 </td> <td style="text-align:right;"> -20 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 33 </td> <td style="text-align:left;"> y = 585 - 730, x = 1 - 147 </td> <td style="text-align:right;"> 0.5596102 </td> <td style="text-align:right;"> 0.2568118 </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> -5 </td> <td style="text-align:right;"> 21 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 34 </td> <td style="text-align:left;"> y = 583 - 728, x = 146 - 290 </td> <td style="text-align:right;"> 0.5158976 </td> <td style="text-align:right;"> 0.2504192 </td> <td style="text-align:right;"> -16 </td> <td style="text-align:right;"> 20 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 39 </td> <td style="text-align:left;"> y = 583 - 728, x = 869 - 1013 </td> <td style="text-align:right;"> 0.7910552 </td> <td style="text-align:right;"> 0.4418507 </td> <td style="text-align:right;"> -30 </td> <td style="text-align:right;"> 22 </td> <td style="text-align:right;"> -27 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 40 </td> <td style="text-align:left;"> y = 583 - 728, x = 1014 - 1157 </td> <td style="text-align:right;"> 0.7087554 </td> <td style="text-align:right;"> 0.2099138 </td> <td style="text-align:right;"> -13 </td> <td style="text-align:right;"> 23 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 41 </td> <td style="text-align:left;"> y = 729 - 873, x = 1 - 145 </td> <td style="text-align:right;"> 0.6213349 </td> <td style="text-align:right;"> 0.3325344 </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 7 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 42 </td> <td style="text-align:left;"> y = 729 - 873, x = 146 - 290 </td> <td style="text-align:right;"> 0.6621352 </td> <td style="text-align:right;"> 0.2711421 </td> <td style="text-align:right;"> -11 </td> <td style="text-align:right;"> 25 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 43 </td> <td style="text-align:left;"> y = 731 - 876, x = 294 - 440 </td> <td style="text-align:right;"> 0.7090347 </td> <td style="text-align:right;"> 0.2995273 </td> <td style="text-align:right;"> 18 </td> <td style="text-align:right;"> -12 </td> <td style="text-align:right;"> 21 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 46 </td> <td style="text-align:left;"> y = 731 - 876, x = 734 - 879 </td> <td style="text-align:right;"> 0.6771834 </td> <td style="text-align:right;"> 0.2547784 </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> -23 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 47 </td> <td style="text-align:left;"> y = 731 - 876, x = 880 - 1026 </td> <td style="text-align:right;"> 0.4894403 </td> <td style="text-align:right;"> 0.1412068 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> -6 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 48 </td> <td style="text-align:left;"> y = 731 - 876, x = 1027 - 1172 </td> <td style="text-align:right;"> 0.6717617 </td> <td style="text-align:right;"> 0.3919928 </td> <td style="text-align:right;"> 7 </td> <td style="text-align:right;"> -3 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 50 </td> <td style="text-align:left;"> y = 874 - 1019, x = 146 - 290 </td> <td style="text-align:right;"> 0.4176441 </td> <td style="text-align:right;"> 0.1927868 </td> <td style="text-align:right;"> -16 </td> <td style="text-align:right;"> -14 </td> <td style="text-align:right;"> -21 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 51 </td> <td style="text-align:left;"> y = 877 - 1022, x = 294 - 440 </td> <td style="text-align:right;"> 0.5931807 </td> <td style="text-align:right;"> 0.1826400 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> -27 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 52 </td> <td style="text-align:left;"> y = 877 - 1022, x = 441 - 586 </td> <td style="text-align:right;"> 0.5609437 </td> <td style="text-align:right;"> 0.1795743 </td> <td style="text-align:right;"> -3 </td> <td style="text-align:right;"> -14 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 53 </td> <td style="text-align:left;"> y = 874 - 1019, x = 580 - 724 </td> <td style="text-align:right;"> 0.5970009 </td> <td style="text-align:right;"> 0.2183671 </td> <td style="text-align:right;"> -9 </td> <td style="text-align:right;"> 22 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 54 </td> <td style="text-align:left;"> y = 874 - 1019, x = 725 - 868 </td> <td style="text-align:right;"> 0.4360425 </td> <td style="text-align:right;"> 0.1278409 </td> <td style="text-align:right;"> -4 </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 55 </td> <td style="text-align:left;"> y = 877 - 1022, x = 880 - 1026 </td> <td style="text-align:right;"> 0.6591527 </td> <td style="text-align:right;"> 0.3204587 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:left;"> comparison_2to1 </td> </tr> <tr> <td style="text-align:right;"> 59 </td> <td style="text-align:left;"> y = 1020 - 1164, x = 291 - 434 </td> <td style="text-align:right;"> 0.6394109 </td> <td style="text-align:right;"> 0.3192734 </td> <td style="text-align:right;"> -23 </td> <td style="text-align:right;"> -6 </td> <td style="text-align:right;"> -21 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 60 </td> <td style="text-align:left;"> y = 1020 - 1164, x = 435 - 579 </td> <td style="text-align:right;"> 0.5910859 </td> <td style="text-align:right;"> 0.2854961 </td> <td style="text-align:right;"> -28 </td> <td style="text-align:right;"> -4 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> <tr> <td style="text-align:right;"> 62 </td> <td style="text-align:left;"> y = 1020 - 1164, x = 725 - 868 </td> <td style="text-align:right;"> 0.6753774 </td> <td style="text-align:right;"> 0.4380810 </td> <td style="text-align:right;"> -3 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> -24 </td> <td style="text-align:left;"> comparison_1to2 </td> </tr> </tbody> </table></div> --- ```r cmcR::cmcPlot(x3p1,cmcDF = cmc$initialCMCs[[1]],method = "ggplot2") ``` <img src="zemmelsCCpresentation_files/figure-html/unnamed-chunk-34-1.png" style="display: block; margin: auto;" /> ```r cmcR::cmcPlot(x3p1,cmcDF = cmc$finalCMCs,method = "ggplot2") ``` <img src="zemmelsCCpresentation_files/figure-html/unnamed-chunk-36-1.png" style="display: block; margin: auto;" /> --- class: inverse, middle, center # Results & Discussion --- #Results & Discussion - Fadul (2011) cartridge case scans - 63 known match pairs, 717 known non-match pairs - Sensitivity analysis under various pre, inter, and post-processing conditions --- class: inverse, middle, center # Conclusions & Future Work --- #Conclusions --- #Future Work - **Short-term:** - `R` Journal submission - `cmcR` package submission to CRAN -- - **Longer-term:** - Techniques for dealing with `NA` values - Principled approach to quantifying and/or modelling similarity --- #References --- class: center, middle # Questions?